Artificial Intelligence Technology Semantic Web Technology Search Technology DataBase Technology Ontology Technology Digital Transformation Technology User Interface and DataVisualization Workflow & Services. Programming Clojure Database Technologies
As a means of making the aforementioned tightly coupled functions loosely coupled, there is a method of using STM (software transaction memory) as a means of implementing Clojure. For example, in the case of using atom
(def my-atom (atom nil))
(defn my-func []
(do (swap! my-atom assoc state-data)
(function col)))
or using core.async, you can use
(def c (chan 1))
(take! c
(fn [x]
(println "Clojure Callback value " x)))
(put! c "hello world")
You can use something like Here we introduce the case of using redis as a channel.
Redis (REmote DIctionary Server) is a networked, persistent, in-memory database and a fast kv-store that can handle data structures such as associative arrays, lists, and sets. If you want to use it on a mac, you can use home-brew and install it with the command “brew insatll redis”.
After installation, use the “redis-server” command to launch it as follows
7917:C 21 Mar 2021 06:17:55.399 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
7917:M 21 Mar 2021 06:17:55.400 * Increased maximum number of open files to 10032 (it was originally set to 256).
7917:M 21 Mar 2021 06:17:55.400 * monotonic clock: POSIX clock_gettime
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 6.2.1 (00000000/0) 64 bit
.-`` .-```. ```/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 7917
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
7917:M 21 Mar 2021 06:17:55.402 # Server initialized
7917:M 21 Mar 2021 06:17:55.404 * Loading RDB produced by version 6.2.1
7917:M 21 Mar 2021 06:17:55.404 * RDB age 126144 seconds
7917:M 21 Mar 2021 06:17:55.404 * RDB memory usage when created 1.00 Mb
7917:M 21 Mar 2021 06:17:55.404 * DB loaded from disk: 0.002 seconds
7917:M 21 Mar 2021 06:17:55.404 * Ready to accept connections
If we use redis-cli as a command line tool here, we get the following.
$ redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> set test "HELLO, World!!" OK 127.0.0.1:6379> get test "HELLO, World!!"
Carmine is a Clojure wrapper for this Redis. leiningen’s dependencies are
Use [com.taoensso/carmine “3.1.0”].
is used. The sample code is as follows.
(ns redis (:require [taoensso.carmine :as car :refer (wcar)])) (def server1-conn {:pool {} :sepc {:host "127.0.0.1" :port 6379}}) (defmacro wcar* [& body] `(car/wcar server1-conn ~@body)) (defn setter [key value] (wcar* (car/set key value))) (defn getter [key] (wcar* (car/get key))) (defn add-list [key value] (wcar* (car/lpush key value))) (defn all-list [key] (wcar* (car/lrange key 0 -1)))
Using these, it is easy to implement something similar to core.async’s channel. Also, pipeline processing with branching is possible by using the pub/sub function of Redis.In the next article, I will discuss redis in more detail.

Chinoba
Intelligence as Relationship
Research Platform
founded by
Masao Watanabe
AI Systems Architecture
Decision Trace
Human–AI Coordination
Algorithmic Governance
Related Research
This topic is part of the Chinoba Knowledge Base.

コメント